package com.yellowcong.controller;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 创建日期:2018年5月8日<br/>
 * 代码创建:黄聪<br/>
 * 功能描述:<br/>
 */
@Controller
@RequestMapping("/user")
public class UserController {
	
	/**
	 * 用户列表
	 * @param map
	 * @return
	 */
	@RequestMapping("/list")
	public String list(ModelMap map){
		//获取subject信息
		Subject subject = SecurityUtils.getSubject();
		String username = subject.getSession(false).getAttribute("username").toString();
		
		map.put("username", username);
		return "/user/list";
	}
	
	@ResponseBody
	@RequestMapping("/unauthorized")
	public String unauthorized(){
		return "用户未授权";
	}
	
	@ResponseBody
	@RequestMapping("/page2")
	public String testPage2(){
		return "测试需要授权的页面";
	}
	
	/**
	 * 跳转到登录页面
	 * 创建日期:2017年9月23日<br/>
	 * 创建用户:yellowcong<br/>
	 * 功能描述:
	 * @return
	 */
	@RequestMapping(value="/login",method=RequestMethod.GET)
	public String loginInput(){
		return "user/loginInput";
	}
	
	/**
	 * 退出操作
	 * @return
	 */
	@RequestMapping(value="/logout")
	public String logout(){
		//登出系统
		SecurityUtils.getSubject().logout();
		return "user/loginInput";
	}

	/**
	 * 创建日期:2017年9月23日<br/>
	 * 创建用户:yellowcong<br/>
	 * 功能描述:用户登录操作
	 * @param username
	 * @param password
	 * @return
	 */
	@RequestMapping(value="/login",method=RequestMethod.POST)
	public String login(String username,String password){
		try {
			//获取subject信息
			Subject subject = SecurityUtils.getSubject();
			
			//判断用户是否授权,解决已经登陆授权的用户，重新登陆授权
			if(!subject.isAuthenticated()){
				//用户登录
				UsernamePasswordToken token = new UsernamePasswordToken(username,password);
				//保存session
				token.setRememberMe(true);
				
				subject.getSession().setAttribute("username", username);
				//登录用户
				subject.login(token);
			}
		} catch (Exception e) {
			return "/user/error";
		}
		
		return "redirect:/user/list";
	}
	
	
	@ResponseBody
	@RequestMapping("/error")
	public String error(){
		return "认证失败";
	}
}
